package com.ctbu.score.service;

import com.ctbu.score.domain.Rank;
import com.ctbu.score.domain.Score;

import java.util.List;

/**
 * 成绩服务接口
 **/
public interface ScoreService {

    /**
     * 获取所有成绩信息
     *
     * @return 包含所有成绩信息的列表
     */
    List<Score> getAllScores();

    /**
     * 根据学生学号查询成绩信息
     *
     * @param stuId 学生学号
     * @return 符合条件的成绩列表
     */
    List<Score> selectByStuId(String stuId);

    /**
     * 根据学生学号和学期查询成绩信息
     *
     * @param stuId   学生学号
     * @param scoTerm 学期
     * @return 符合条件的成绩列表
     */
    List<Score> selectByStuIdAndScoTerm(String stuId, String scoTerm);

    /**
     * 添加成绩信息
     *
     * @param score 成绩对象
     * @return 添加操作影响的行数
     */
    int addScore(Score score);

    /**
     * 根据成绩ID删除成绩信息
     *
     * @param scoId 成绩ID
     * @return 删除操作影响的行数
     */
    int deleteScoreById(int scoId);

    /**
     * 根据学生学号和课程名查询成绩信息
     *
     * @param stuId   学生学号
     * @param subName 课程名
     * @return 符合条件的成绩对象，如果不存在则返回null
     */
    Score selectScoreByStuIdAndSubName(String stuId, String subName);

    /**
     * 根据成绩ID查询成绩信息
     *
     * @param scoId 成绩ID
     * @return 符合条件的成绩对象，如果不存在则返回null
     */
    Score selectScoreByScoId(int scoId);

    /**
     * 根据学期查询成绩排名信息
     *
     * @param scoTerm 学期
     * @return 按照成绩排名的列表
     */
    List<Rank> selectRankByTerm(String scoTerm);

    /**
     * 根据学期和班级查询成绩排名信息
     *
     * @param scoTerm  学期
     * @param stuClass 班级
     * @return 按照成绩排名的列表
     */
    List<Rank> selectRankByTermAndStuClass(String scoTerm, String stuClass);
}

